version: '3.3'

services:
  nginx:
    image: nginx:alpine
    depends_on:
      - php
    restart: always
    tty: false
    ports:
      - 80:80
      - 443:443
    volumes:
      # Nginx
      - ./docker/nginx/nginx.conf:/var/nginx/social.conf
      - ./docker/nginx/domain.sh:/var/nginx/domain.sh
      # Certbot
      - ./docker/certbot/www:/var/www/certbot
      - ./docker/certbot/.files:/etc/letsencrypt
      # Social
      - ./public:/var/www/social/public
    env_file:
      - ./docker/bootstrap/bootstrap.env
      - ./docker/db/db.env
    command: /bin/sh -c '/var/nginx/domain.sh;
                         while :; do
                             sleep 6h & wait $${!};
                             nginx -s reload;
                         done &
                         nginx -g "daemon off;"'

  certbot:
    image: certbot/certbot
    depends_on:
      - nginx
    # Check for certificate renewal every 12h as
    # recomnended by Let's Encryot
    entrypoint: /bin/sh -c 'trap exit TERM;
                            while :; do
                                certbot renew > /dev/null;
                                sleep 12h & wait $${!};
                            done'
    volumes:
      - ./docker/certbot/www:/var/www/certbot
      - ./docker/certbot/.files:/etc/letsencrypt

  php:
    build: docker/php
    depends_on:
      - db
    restart: always
    tty: true
    ports:
      - 9000:9000
    volumes:
      # Entrypoint
      - ./docker/php/entrypoint.sh:/entrypoint.sh
      - ./docker/db/wait_for_db.sh:/wait_for_db.sh
      - ./docker/social/install.sh:/var/entrypoint.d/social_install.sh
      # Main files
      - .:/var/www/social
    env_file:
      - ./docker/social/social.env
      - ./docker/db/db.env
    command: /entrypoint.sh

  db:
    image: postgres:alpine
    restart: always
    tty: false
    ports:
      - 5432:5432
    environment:
      - PGDATA=/var/lib/postgres/data
    env_file:
      - ./docker/db/db.env
    volumes:
      - database:/var/lib/postgres/data

  redis:
    image: redis:alpine
    restart: always
    tty: false
    ports:
      - 6379:6379

volumes:
  database:
